var _n18;
var cc__extends = __extends;
var cc__decorate = __decorate;
Object.defineProperty(exports, "__esModule", {
  value: true
});
var cc__decorator = cc._decorator;
var ccp_ccclass = cc__decorator.ccclass;
var ccp_property = cc__decorator.property;
var ccp_menu = cc__decorator.menu;
var def_Ipha_FollowEf = function (t) {
  function _ctor() {
    // 创建实例并设置默认属性
    const instance = null !== t && t.apply(this, arguments) || this;

    // 初始化实例属性
    instance.m_SpeedMax = 10; // 最大速度
    instance.m_SpeedMin = 5; // 最小速度
    instance.m_RotateDelay = 0; // 旋转延迟
    instance.m_DestroyTargetDis = 10; // 目标销毁距离
    instance.speed = 5; // 当前速度
    instance.moveAngle = 0; // 移动角度
    instance.moveDir = cc.v2(0, 1); // 移动方向（向上）
    instance.target = null; // 目标对象
    instance.rotateSpeed = 0.005; // 旋转速度
    instance.rotateSpeedMin = 0.01; // 最小旋转速度
    instance.rotateSpeedMax = 0.2; // 最大旋转速度
    instance.isCanMove = true; // 是否可以移动
    instance.isCanRotate = false; // 是否可以旋转
    instance.isArrive = false; // 是否到达目标

    return instance; // 返回实例
  }
  cc__extends(_ctor, t);
  _ctor.prototype.onLoad = function () { };
  _ctor.prototype.start = function () {
    const self = this; // 保存上下文的引用

    // 在指定延迟后允许旋转
    this.scheduleOnce(function () {
      self.isCanRotate = true; // 允许旋转
    }, this.m_RotateDelay);
  };
  _ctor.prototype.initData = function (t, e) {
    // 设置移动角度
    this.moveAngle = t;

    // 根据角度计算移动方向
    this.moveDir = cc.v2(Math.cos(t), Math.sin(t));

    // 初始化速度和旋转速度
    this.speed = this.m_SpeedMin; // 设置当前速度为最小速度
    this.rotateSpeed = this.rotateSpeedMin; // 设置旋转速度为最小旋转速度

    // 设置目标
    this.target = e; // 把目标赋值给目标属性
  };
  _ctor.prototype.followMove = function (t) {
    // 检查目标是否存在且未到达，并且可以移动
    if (this.target !== null && !this.isArrive && this.isCanMove) {
      // 如果可以旋转
      if (this.isCanRoate) {
        const targetDirection = this._getTargetDirVec(); // 获取目标方向向量

        // 平滑转向目标方向
        this.moveDir.x = cc.misc.lerp(this.moveDir.x, targetDirection.x, this.rotateSpeed);
        this.moveDir.y = cc.misc.lerp(this.moveDir.y, targetDirection.y, this.rotateSpeed);

        // 增加旋转速度
        this.rotateSpeed = cc.misc.lerp(this.rotateSpeed, this.rotateSpeedMax, 0.05);
      }

      // 平滑加速到最大速度
      this.speed = cc.misc.lerp(this.speed, this.m_SpeedMax, 0.01);

      // 根据速度和方向移动节点
      this.node.x += 60 * t * this.speed * this.moveDir.x;
      this.node.y += 60 * t * this.speed * this.moveDir.y;

      // 检测与目标的距离
      if (this._getTargetPos().sub(this.node.getPosition()).len() < this.m_DestroyTargetDis) {
        this.isCanMove = false; // 禁止移动
        this.isArrive = true; // 标记为已到达
        this.destroyFollow(); // 销毁跟随效果
      }
    }
  };
  _ctor.prototype._getTargetDirVec = function () {
    var t = this._getTargetPos();
    return cc.v2(t.x - this.node.x, t.y - this.node.y).normalize();
  };
  _ctor.prototype._getTargetPos = function () {
    var t = this._getTargetWPos();
    return this.node.parent.convertToNodeSpaceAR(t);
  };
  _ctor.prototype._getTargetWPos = function () {
    return this.tartget.convertToWorldSpaceAR(cc.v2(0, 0));
  };
  _ctor.prototype.destroyFollow = function () {
    const self = this; // 保存上下文的引用

    // 停止目标节点的所有动画
    cc.Tween.stopAllByTarget(this.node);

    // 创建一个新动画，设置透明度并在完成后销毁节点
    cc.tween(this.node)
      .to(0.3, { opacity: 0 }) // 平滑过渡到透明
      .call(() => {
        self.node.destroy(); // 动画完成后销毁节点
      })
      .start(); // 启动动画
  };
  _ctor.prototype.update = function (t) {
    this.followMove(t);
  };
  _ctor.prototype.lateUpdate = function () { };
  cc__decorate([ccp_property({
    displayName: "最大速度"
  })], _ctor.prototype, "m_SpeedMax", undefined);
  cc__decorate([ccp_property({
    displayName: "最小速度"
  })], _ctor.prototype, "m_SpeedMin", undefined);
  cc__decorate([ccp_property({
    displayName: "转向延迟时间"
  })], _ctor.prototype, "m_RotateDelay", undefined);
  cc__decorate([ccp_property({
    displayName: "销毁距离"
  })], _ctor.prototype, "m_DestroyTargetDis", undefined);
  return cc__decorate([ccp_ccclass, ccp_menu("ipha组件/跟踪组件")], _ctor);
}(cc.Component);
exports.default = def_Ipha_FollowEf;